SQL 注入(SQL Injection)攻擊,
一直是 OWASP 十大攻擊裡排行前段班的攻擊手法,
目的係希望透過如果該網站表單的輸入未得到驗證保護,
則將導致資料庫執行非預期的 SQL 代碼,從而使駭客獲得關鍵資料。
透過 SQL Injection 的機制,可以達到幾種不同效果:
透過 SQL Injection 的手法,
攻擊者可以對資料庫進行新增、刪除、修改的操作,
例如更新 Table 資料、新增行列(Row)資料、
確認是否有特定 Table 存在、刪除特定 Table,
或要求回傳更多非預期操作下的敏感或內部資料。
隨著 SQL Injection 手法也有不同種類,像是:
In-band SQL injection
攻擊者使用使用相同的通訊管道與資料庫互動,
最常見的 SQL 攻擊種類,透過 Error-based SQL,
或是 UNION SQL injection 方式執行。
Inferential SQL injection
在推斷注入裡,透過向資料庫發送惡意 SQL 查詢來達到,
因為回傳的結果一般是布林形式(True/False),
攻擊者僅能使用真或假結果來決定資料庫和資料的結構。
Out-of-Band Injection
攻擊者使用不同的通訊管道,
例如資料庫電子郵件功能或檔案傳入功能來執行攻擊,
這類型的攻擊難度很高,因為攻擊者需要與伺服器通訊,
同時掌握 Web 應用程式使用的資料庫伺服器的相關功能等。
SQL Injection 牽涉 Web 應用程式與資料庫互動機制,
也包含系統本身有無直接弱點(Vulnerability)可被利用,
因此防範 SQL Injection 也會有很多做法:
身份安全的第一道防線,即在前端系統與最終用戶互動過程,
良好的輸入、保護與驗證機制,
可以有效降低因 SQL Injection 導致的資料外洩問題,
同時也可以確保身份資訊降低冒用情形或風險。